package org.sam.beatles.ui.panels;

import java.io.File;
import java.util.Collection;

import javax.swing.table.DefaultTableCellRenderer;

import org.sam.beatles.domain.CodeMsg;
import org.sam.beatles.integrations.JSTableHttpClientBuilderImpl;
import org.sam.beatles.integrations.JSTableModelHttpClientAdapter;
import org.sam.beatles.ui.JPanelSingleDataWindow;
import org.sam.swing.JSToolBar;
import org.sam.swing.action.JSFileExportActionListener;
import org.sam.swing.table.JSTable;
import org.sam.swing.table.JSTableBuilder;
import org.sam.swing.table.JSTableColumn;
import org.sam.swing.table.JSTableModel;
import org.sam.swing.table.JSTableModelEvent;
import org.sam.swing.table.JSTableModelLinster;
import org.sam.swing.table.renderer.JSTableRowNumberRenderer;
import org.sam.swing.table.tools.JSTableToolBar;

/**
 * 项目设置
 * 
 * @author sam
 *
 */
public class JPanelHttpClientTest extends JPanelSingleDataWindow<CodeMsg> {

	private static final long serialVersionUID = 1071373137696313079L;

	/**
	 * {@inheritDoc} 这里是构建表格的方法，仅仅需要复写这么一个方法就可以了
	 * renderer,editor在org.sam.table.renderer,editor2个包里，具体用哪个自己研究一下
	 */
	@Override
	protected JSTable buildTable() {
		DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
		renderer.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);

		//如果不绑定值，必须给Identifier设置为"",否则会报错，JTable本身的bug
		JSTableColumn c0 = new JSTableColumn();
		c0.setTitle("#");
		c0.setIdentifier("");
		c0.setCellRenderer(new JSTableRowNumberRenderer());
		c0.setEditable(false);
		c0.setWidth(20);
		c0.setModelIndex(0);

		JSTableColumn c1 = new JSTableColumn();
		c1.setTitle("编码");
		c1.setIdentifier("code");
		c1.setCellRenderer(renderer);
		c1.setDefaultValue(0);
		c1.setMinWidth(125);

		JSTableColumn c2 = new JSTableColumn();
		c2.setTitle("信息");
		c2.setIdentifier("msg");
		c2.setCellRenderer(renderer);
		c2.setDefaultValue("");
		c2.setMinWidth(300);

		try {
			// 使用httpclient测试
			JSTableBuilder<Collection<CodeMsg>> builder = new JSTableHttpClientBuilderImpl<CodeMsg>(CodeMsg.class, 
					"http://localhost:8080/test/codemsg",c0, c1, c2) {

						@Override
						public JSTableModelLinster<Collection<CodeMsg>> buildModelLinster(
								JSTableModel<Collection<CodeMsg>> tableModel) throws Exception {
							JSTableModelHttpClientAdapter<CodeMsg> adapter = new JSTableModelHttpClientAdapter<CodeMsg>(CodeMsg.class,this.getRetrievUrl()) {

								//这里是更新算法，可以自己复写
								@SuppressWarnings("unchecked")
								@Override
								public boolean update(JSTableModelEvent event) throws Exception {
									//这是删除数组
									Collection<CodeMsg> deletes = (Collection<CodeMsg>)event.getTableModel().getDeletes();
									if (deletes != null && !deletes.isEmpty()) {
										//这里删除
									}
									
									Collection<CodeMsg> creates = (Collection<CodeMsg>)event.getTableModel().getCreates();
									if (creates != null && !creates.isEmpty()) {
										//这里新增
									}
									
									Collection<CodeMsg> modifieds = (Collection<CodeMsg>) event.getTableModel().getModified();
									if (modifieds != null && !modifieds.isEmpty()) {
										//这里修改
									}
									
									return true;
								}
								
							};
							tableModel.setTableModelLinster(adapter);
							return adapter;
						}
				
			};
			this.tableModel = builder.buildTableModel();
			this.tableColModel = builder.buildTableColumnModel();
			this.table = builder.buildTable();

		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return this.table;
	}

	/**
	 * 以下方法如果不需要修改，使用系统默认的方法和样式，则不需要重写
	 */

	/**
	 * {@inheritDoc} 这里可以复写生产工具栏的方法
	 */
	@Override
	protected JSToolBar buildToolBar() {
		JSTableToolBar toolBar = new JSTableToolBar(table);
		toolBar.enableRetrieve();
		toolBar.enableEdit();
		toolBar.enableAdd();
		toolBar.enableDel();
		toolBar.enableSave();
		toolBar.enableExport(new JSFileExportActionListener() {
			
			/**
			 * 这里可可以写弹出框获取保存文件，也可以自己按照规则生成文件保存位置
			 * 返回null表示出错，后边就不执行了
			 */
			@Override
			public File initFile() throws Exception {
				return null;
			}
			
			/**
			 * 这里写导出代码
			 */
			@Override
			public void afterOpen(File file) throws Exception {
				Collection<CodeMsg> datas = tableModel.getDatas();
				if (datas == null || datas.isEmpty())
					return;
				
				//下边你可以循环遍历了
			}
			
			/**
			 * 这里可以给个用户提示什么的
			 * 也可以什么都不写
			 */
			@Override
			public void afterDone() throws Exception {
				
			}
		});
		return toolBar;
	}
}
